package com.chinairi.mall.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chinairi.mall.controller.viewobject.*;
import com.chinairi.mall.model.*;
import com.chinairi.mall.service.modelobject.OrderInfoMO;
import com.chinairi.mall.service.modelobject.ProjectMO;
import com.chinairi.mall.service.modelobject.ProjectPlanReqDetailMO;
import com.chinairi.mall.service.modelobject.PurchaseDetailAndOrderMO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单时效，视频查看以及质量数据
 * </p>
 *
 * @author gsl
 * @since 2020-09-30
 */
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
    /**
     * 获取订单商品信息，主要是数量，并和需求/建议计划物料挂钩
     *
     * @param orderId
     * @return
     */
    List<PurchaseDetailAndOrderMO> getPurchaseListByOrderId(@Param("orderId") String orderId);

    /**
     * 查询用户电话
     *
     * @param userId
     * @return
     */
    String selectUserPhone(@Param("userId") String userId);

    /**
     * 查询订单详细信息
     *
     * @param orderId
     * @return
     */
    OrderInfo selectOrderById(@Param("orderId") String orderId);

    /**
     * 订单时效查询
     *
     * @param proProcessParam
     * @return
     */
    List<Map<String, Object>> getProProcessInfo(@Param("proProcessParam") ProProcessParam proProcessParam);

    /**
     * 获取视频信息
     *
     * @param saleOrderNo
     * @return
     */
    List<Map<String, Object>> getVideoInfo(@Param("saleOrderNo") String saleOrderNo);

    /**
     * 获取订单进度详情信息
     *
     * @param productProduceProcessId
     * @return
     */
    List<Map<String, Object>> getOrderDetail(@Param("productProduceProcessId") String productProduceProcessId);

    /**
     * 质量数据查询
     *
     * @param productQltReportParam
     * @return
     */
    List<Map<String, Object>> getProductQltReportList(@Param("productQltReportParam") ProductQltReportParam productQltReportParam);

    /**
     * 成品数据检验查询
     *
     * @param isVideo
     * @return
     */
    List<Map<String, Object>> getMatTechnologyQltReportList(@Param("qltId") String qltId, @Param("isVideo") String isVideo);

    /**
     * 工序质检数据查询
     *
     * @param technologyReportParam
     * @return
     */
    List<Map<String, Object>> getTechnologyReportList(@Param("technologyReportParam") TechnologyReportParam technologyReportParam);

    /**
     * 获取文件信息
     *
     * @param mqId
     * @return
     */
    List<Map<String, Object>> getFileList(@Param("mqId") String mqId);

    /**
     * 框架协议库存查询
     *
     * @param stockReportParam
     * @return
     */
    List<Map<String, Object>> getStockReportList(@Param("stockReportParam") StockReportParam stockReportParam);


    /**
     * 批量插入采购服务商品表
     *
     * @param orderServicePurchaseGoodsList
     */
    void batchInsertServicePurchaseGoods(@Param("orderServicePurchaseGoodsList") List<OrderServicePurchaseGoods> orderServicePurchaseGoodsList);

    /**
     * 批量插入配送服务下的商品
     *
     * @param orderServiceTransportGoodsList
     */
    void batchInsertServiceTransportGoods(@Param("orderServiceTransportGoodsList") List<OrderServiceTransportGoods> orderServiceTransportGoodsList);

    /**
     * 获取质量数据下拉
     *
     * @return
     */
    List<Map<String, Object>> listDataType();

    /**
     * 批量插入质控服务下的商品
     *
     * @param orderServiceQualityGoodsList
     */
    void batchInsertServiceQualityGoods(@Param("orderServiceQualityGoodsList") List<OrderServiceQualityGoods> orderServiceQualityGoodsList);

    /**
     * 插入实物订单信息
     *
     * @param orderInfoParam
     */
    void saveOrderInfo(@Param("orderInfoParam") OrderGoodsInfoParam orderInfoParam);

    /**
     * 根据店铺ID获取店铺名称
     *
     * @param ostShopId
     * @return
     */
    String selectShopName(@Param("ostShopId") String ostShopId);

    /**
     * 根据采购计划id查询项目名称
     *
     * @param planPurchaseId
     * @return
     */
    ProjectMO selectProjectName(@Param("planPurchaseId") String planPurchaseId);

    /**
     * 批量插入仓储服务下的商品
     *
     * @param orderServiceStorageGoodsList
     */
    void batchInsertServiceStorageGoods(@Param("orderServiceStorageGoodsList") List<OrderServiceStorageGoods> orderServiceStorageGoodsList);

    /**
     * 批量插入结算服务下的商品
     *
     * @param orderServiceSettleGoodsList
     */
    void batchInsertServiceSettleGoods(@Param("orderServiceSettleGoodsList") List<OrderServiceSettleGoods> orderServiceSettleGoodsList);

    /**
     * 更新采购计划
     *
     * @param planPurchaseId
     * @param goodsDbid
     * @param ogGoodsNumber
     */
    void updatePurchaseDetailNumber(@Param("planPurchaseId") String planPurchaseId, @Param("goodsDbid") String goodsDbid, @Param("ogGoodsNumber") Float ogGoodsNumber);

    /**
     * 收发货地址
     *
     * @param orderShopId
     * @param addressType
     * @return
     */
    ReSeAddress selectReSeAddress(@Param("orderShopId") String orderShopId, @Param("addressType") String addressType);

    /**
     * 更新订单状态
     *
     * @param orderId
     * @param orderState
     */
    void updateOrderState(@Param("orderId") String orderId, @Param("orderState") String orderState);

    /**
     * 更新采购服务订单的状态
     *
     * @param orderId
     * @param state
     */
    void updatePurchaseOrderState(@Param("orderId") String orderId, @Param("state") String state);

    /**
     * 更新配送服务订单的状态
     *
     * @param orderId
     * @param state
     */
    void updateTransportOrderState(@Param("orderId") String orderId, @Param("state") String state);

    /**
     * 更新质控服务订单的状态
     *
     * @param orderId
     * @param state
     */
    void updateQualityOrderState(@Param("orderId") String orderId, @Param("state") String state);

    /**
     * 更新仓储服务订单的状态
     *
     * @param orderId
     * @param state
     */
    void updateStorageOrderState(@Param("orderId") String orderId, @Param("state") String state);

    /**
     * 更新结算服务订单的状态
     *
     * @param orderId
     * @param state
     */
    void updateSettleOrderState(@Param("orderId") String orderId, @Param("state") String state);

    /**
     * 获取买家用户所有实物订单和服务订单的状态
     *
     * @param createUser
     */
    List<OrderStateVO> getOrderSate(String createUser);

    /**
     * 获取采购计划下的特定商品
     *
     * @param planPurchaseId
     * @param goodsDbIdList
     * @return
     */
    List<ProjectPlanReqDetailMO> selectPlanReqDetail(@Param("planPurchaseId") String planPurchaseId, @Param("goodsDbIdList") List<String> goodsDbIdList);

    /**
     * 下单后更新采购计划详情
     *
     * @param projectPlanReqDetailMOList
     */
    void batchUpdateReqDetailNum(@Param("projectPlanReqDetailMOList") List<ProjectPlanReqDetailMO> projectPlanReqDetailMOList);

    /**
     * 根据买家用户id获取其订单
     *
     * @return
     */
    List<OrderStateVO> getOrderByUserId(@Param("userId") String userId,@Param("orderId") String orderId);

    /**
     * 获取用户店铺订单list
     *
     * @param orderInfoVO
     * @param userId
     * @return
     */
    List<OrderInfo> selectShopOrderList(@Param("orderInfoVO") OrderInfoVO orderInfoVO, @Param("userId") String userId);

    /**
     * 商品信息查询
     *
     * @param goodsDbId 商品信息表主键id
     * @return 商品信息
     */
    Map<String, Object> getGoodsInfo(@Param("goodsDbId") String goodsDbId);

    /**
     * 订单发送的地址
     *
     * @return
     */
    String getOrderSendUrl();

    /**
     * 根据店铺ID查询所有的订单
     *
     * @param orderInfoMO
     * @return
     */
    List<OrderInfoMO> selectOrderInfoByCsDbId(@Param("orderInfoMO") OrderInfoMO orderInfoMO);

    /**
     * 获取视频信息
     * @return
     */
    List<Map<String, Object>> getTeVideo();

    /**
     * 根据店铺ID查询合同id
     * @param orderShopId
     * @return
     */
    String selectContractId(@Param("orderShopId") String orderShopId);

    /**
     * 获取收货地址
     * @param userId
     * @return
     */
    String selectReceiveAddress(@Param("userId") String userId);

    /**
     * 更新店铺
     * @param compShop
     */
    void updateOrderShopName(@Param("compShop") CompShop compShop);

    /**
     * 获取采购店铺ID
     * @return
     */
    CompShop selectPurchaseShop();

    /**
     * 获取订单的六位流水号
     * @return
     */
    int getOrderNo();

    /**
     * 获取订单流水号
     * @return
     */
    int getOrderPurchaseNo();

    /**
     * 获取配送服务订单流水号
     * @return
     */
    int getOrderTransportNo();

    /**
     * 获取质控服务订单流水号
     * @return
     */
    int getOrderQualityNo();

    /**
     * 仓储订单流水号
     * @return
     */
    int getOrderStorageNo();

    /**
     * 结算订单流水号
     * @return
     */
    int getOrderSettleNo();

    /**
     * 获取当前用户下的商品订单统计
     * @param userId
     * @return
     */
    List<Map<String, Object>> getOrderInfoByUserId(@Param("userId") String userId);

    /**
     * 获取当前用户下的采购订单统计
     * @param userId
     * @param shopType
     * @return
     */
    List<Map<String, Object>> getPurchaseOrderInfo(@Param("userId") String userId, @Param("shopType") String shopType);

    /**
     * 获取当前用户下的配送订单统计
     * @param userId
     * @param shopType
     * @return
     */
    List<Map<String, Object>> getTransportOrderInfo(@Param("userId") String userId, @Param("shopType") String shopType);

    /**
     * 获取当前用户下的质控订单统计
     * @param userId
     * @param shopType
     * @return
     */
    List<Map<String, Object>> getQualityOrderInfo(@Param("userId") String userId, @Param("shopType") String shopType);

    /**
     * 获取当前用户下的仓储订单统计
     * @param userId
     * @param shopType
     * @return
     */
    List<Map<String, Object>> getStorageOrderInfo(@Param("userId") String userId, @Param("shopType") String shopType);

    /**
     * 获取当前用户下的结算订单统计
     * @param userId
     * @param shopType
     * @return
     */
    List<Map<String, Object>> getSettleOrderInfo(@Param("userId") String userId, @Param("shopType") String shopType);

    /**
     * 获取承运商地址
     * @param csDbId 店铺id
     * @return 获取承运商地址
     */
    String getBussinessAdress(@Param("csDbId") String csDbId);

    /**
     * 根据项目id获取项目下所有订单信息
     * @param pid 项目id
     * @return 所有订单信息
     */
    List<OrderInfo> getAllByPId(String pid);

    /**
     * 根据项目id查询已完成订单数
     * @param pId 项目id
     * @return 已完成订单数
     */
    Integer getDoneOrderNum(String pId);

    /**
     * 根据项目id查询未完成订单数
     * @param pId 项目id
     * @return 未完成订单数
     */
    Integer getUnDoneOrderNum(String pId);

    /**
     * 根据商品id获取11位的物料编码
     * @param goodsDbid
     * @return
     */
    String getMatCodeByGoodsId(@Param("goodsDbid") String goodsDbid);

    /**
     * 根据物料编码获取商品id
     *
     * @param csDbId
     * @param matCode
     * @return
     */
    List<String> getGoodsIdByMatCode(@Param("csDbId") String csDbId, @Param("matCode") String matCode);
}
